import pygame
from pygame.sprite import Sprite


class Bullet(Sprite):
    """子弹类"""
    def __init__(self, screen: object, settings: object, ship: object) -> None:
        super().__init__()
        self.screen = screen
        self.settings = settings
        # 创建子弹矩形
        self.rect = pygame.Rect(0, 0,
                                self.settings.sizes['bullet_width'],
                                self.settings.sizes['bullet_height'])

        self.rect.midtop = ship.rect.midtop  # 初始子弹位置：子弹的顶部中心点和飞船的顶部中心点相同模拟子弹从飞船发出。
        self.y = float(self.rect.y)  # 子弹的y坐标，子弹从飞船射出后其y坐标不断减小，为了记录位置才定义此变量。

    def update(self) -> None:
        """更新子弹的位置"""
        if self.rect.y < 0:  # 子弹飞出屏幕，删除子弹。
            self.kill()
        else:
            self.y -= self.settings.other['bullet_speed']  # 子弹的y坐标不断减小。
            self.rect.y = self.y  # 更新子弹的位置。


    def draw(self) -> None:
        """绘制子弹"""
        pygame.draw.rect(self.screen, self.settings.colors['bullet_color'], self.rect)  # 绘制子弹。